import scrapy


# 这里是爬虫的主体


class A4399gameSpider(scrapy.Spider):
    name = "4399game"  # 爬虫名字
    allowed_domains = ["4399.com"]  # 爬虫允许的域名
    start_urls = ["http://www.4399.com/flash/"]  # 起始页面的url: http://www.4399.com/flash/

    def parse(self, response):  # response响应对象
        # parse默认是用来处理解析的，引擎对下载器的请求后的response（默认）交给spider的parse方法解析
        # 本来应该是解析数据的先打印一下
        # print(response)
        # # 拿到页面源代码
        # text = response.text
        # print(text)

        # 提取数据,不用导包 response.json() response.xpath()使用xpath进行解析, response.css()使用css解析器

        # 获取页面的游戏名字
        # txt = response.xpath('//ul[@class="n-game cf"]/li/a/b/text()').extract()  # 提取内容
        # print(txt)

        # 分块提取
        li_list = response.xpath('//ul[@class="n-game cf"]/li')  # 每一个li就是一个数据
        for li in li_list:
            # name = li.xpath("./a/b/text()")  # 找li a里面的b文字
            # 弊端：  .extract()[0]如果没有为None提取第一项会报错
            # 改进：  .extract_first()提取一项内容，如果没有就返回None
            name = li.xpath("./a/b/text()").extract_first()  # 找li a里面的b文字
            sort = li.xpath("./em/a/text()").extract_first()  # 类别
            date = li.xpath("./em/text()").extract_first()  # 类别
            # 字典保存提取的数据
            dic = {
                "name": name,
                "sort": sort,
                "date": date
            }
            # print(name, sort, date)
            # 需要用yield将字典数据传递给管道
            yield dic  # 返回的数据，直接可以认为是给了管道pipelines
